package Sort.bubbleSort;

/**最小的数据放在数组的开始（下表为0），并将最大的数据项放在数组的最后（数组下标  长度-1）
 * 外层for循环 计数器out 从数组最后开始，经过一次循环out-1   这样下标大于out的数据就是有序的
 * 变量out在每完成一次内部循环后就左移一位  不需要处理已经排好序的数据
 * 内层for循环计数器下标in从数组最开始算起，每完成一次内部循环加一，如果下标为in的数据项大于下标为in+1的数据项，则交换两个数据
 *
 * 交换和操作次数都和N^2 成正比，冒泡排序需要O(N^2)级别
 * @program: jvm
 * @description
 * @author: tkk fendoukaoziji
 * @create: 2019-05-09 09:30
 **/
public class BubbleSort {
    public static void main(String[] args) {
        long[] arr={77,99,44,55,22,88,11,00,66,33};
        showArr(arr);
        bubbleSort(arr);
        showArr(arr);
    }

    private static void showArr(long[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    private static void bubbleSort(long[] arr) {
        int out,in;
        for ( out =arr.length-1; out >1 ; out--) {
            for ( in = 0; in <out; in++) {
                if(arr[in]>arr[in+1]){
                  /*  long temp=arr[in];
                    arr[in]=arr[in+1];
                    arr[in+1]=temp;*/
                   swap( arr,in,in+1);
                }
            } //end for in
        }//end for out
    }

    private static void swap(long[] arr, int before, int after) {
        long temp = arr[before];
        arr[before]=arr[after];
        arr[after]=temp;

    }


}















